package com.wuba.rxjavademo.lyz.day0505;

import com.wuba.rxjavademo.lyz.BaseDemo;

import java.util.concurrent.TimeUnit;

import rx.Observable;

/**
 * Created by liyaxing on 2016/5/9.
 */
public class Demo04 extends BaseDemo {

    public static void main(String[] ss){
//        Observable.just(1,2,4,3,5,6,7).flatMapIterable(integer -> {
//            List<String> list =  new ArrayList<String>() ;
//            for (int i = 0; i < integer; i++) {
//                list .add(integer+"") ;
//            }
//            return list ;
//        }).subscribe(s -> {
//            print(s);
//        }) ;
//        Observable.just(1,2,4,3,5,6,7).scan((a,b)->a+b).subscribe(integer -> print(integer)) ;
//        Observable<GroupedObservable<String,Integer>> observable = Observable.just(1,2,4,3,5,6,7).groupBy(integer -> {
//            if(integer % 2 == 0){
//                return "偶数" ;
//            }else {
//                return "奇数" ;
//            }
//        }) ;
//        observable.subscribe(stringIntegerGroupedObservable -> {
//            stringIntegerGroupedObservable.subscribe(integer -> print(stringIntegerGroupedObservable.getKey() + " : " +integer)) ;
//        }) ;
//        Observable.just(1,2,4,3,5,6,7).buffer(2,4).subscribe(list->{print(list);}) ;
//        print(System.currentTimeMillis() / 1000 / 60 / 60 / 24 /365);
//        Observable.just(1,2,4,3,5,6,7).window(3).subscribe(integerObservable -> integerObservable.subscribe(integer -> {
//            print(integerObservable + " %% " + integer);
//        })) ;
        Observable<Integer> firstObservable = Observable.create(subscriber -> {
            for (int i = 0; i < 10; i++) {
                subscriber.onNext(123);
            }
        }) ;
        Observable<Integer> secondObservable = Observable.just(1,2,3,4) ;
//        Observable.mergeDelayError(firstObservable,secondObservable).subscribe(integer -> print(integer)) ;
//        Observable.zip(firstObservable,secondObservable,(a,b)-> a + b).subscribe(integer -> print(integer));
        firstObservable.join(secondObservable,
                integer -> Observable.timer(1, TimeUnit.SECONDS),
                integet -> Observable.timer(0, TimeUnit.SECONDS),
                (integer1, integer2) -> integer1 + integer2)
                .subscribe(integer -> print(integer));
    }

}
